
export const combineReducers = function combineReducers(reducers) {
    // reducers 是一个对象，以键值对存储了：模块名 & 每个模块的reducers

    const reducersKeys = Reflect.ownKeys(reducers)

    // 返回的是合并后的统一reducer
    /**
        + 每一次dispatch派发，都是把这个reducer执行
        + state 就是 redux 容器的公共状态   -- 总状态：分模块管理其他板块的状态
        + action 就是派发的时候传递过来的行为对象
     */
    return function reducer(state = {}, action) {
        // 把reducers中的每一个小的reducer(就是方法，每个模块的reducer)都要执行
        // 把对应模块的状态/action 行为对象传递进来；返回值替换当前模块下的状态！！
        let nextState = {}
        reducersKeys.forEach(key => {
            let reducer = reducers[key]
            nextState[key] = reducer(state[key], action)  // 这样就执行了不同模块下的reducer
        });
        return nextState
    }
}
